﻿#define _CRT_SECURE_NO_WARNINGS 1

#include<iostream>
#include<vector>
#include <list>
#include <queue>
//using namespace std;
//class Solution 
//{
//public:
//    void reverseString(vector<char>& s) 
//    {
//        int left = 0, right = s.size() - 1;
//        while (left <= right)
//        {
//            swap(s[left++], s[right--]);
//        }
//    }
//
//};
//int main()
//{
//	vector<char> s = { '\"'};
//	Solution sol;
//	sol.reverseString(s);
//    for (auto e : s)
//    {
//            cout << e << " ";
//    }
//
//
//	return 0;
//}

//int main(int argc, char* argv[])
//
//{
//
//	string strText = "How are you?";
//
//	string strSeparator = " ";
//
//	string strResult;
//
//	int size_pos = 0;
//
//	int size_prev_pos = 0;
//
//	while ((size_pos = strText.find_first_of(strSeparator, size_pos)) != string::npos)
//
//	{
//
//		strResult = strText.substr(size_prev_pos, size_pos - size_prev_pos);
//
//		cout << strResult << " ";
//
//		size_prev_pos = ++size_pos;
//
//	}
//
//	if (size_prev_pos != strText.size())
//
//	{
//
//		strResult = strText.substr(size_prev_pos, size_pos - size_prev_pos);
//
//		cout << strResult << " ";
//
//	}
//
//	cout << endl;
//
//	return 0;
//
//}

//int main()
//
//{
//
//    string str("Hello Bit.");
//
//    str.reserve(111);
//
//    str.resize(5);
//
//    str.reserve(50);
//
//    cout << str.size() << ":" << str.capacity() << endl;
//
//    return 0;
//
//}


//int main()
//
//{
//	int ar[] = { 1,2,3,4,5,6,7,8,9,10 };
//
//	int n = sizeof(ar) / sizeof(int);
//
//	vector<int> v(ar, ar + n);
//
//	cout << v.size() << ":" << v.capacity() << endl;
//
//	v.reserve(100);
//
//	v.resize(20);
//
//	cout << v.size() << ":" << v.capacity() << endl;
//
//	v.reserve(50);
//
//	v.resize(5);
//
//	cout << v.size() << ":" << v.capacity() << endl;
//
//	return 0;
//
//}
//

//template<typename Type>
//Type Max(const Type& a, const Type& b) 
//{
//	std::cout << "This is Max<Type>" << std::endl;
//	return a > b ? a : b;
//}
//
//template<>
//int Max<int>(const int& a, const int& b) 
//{
//	std::cout << "This is Max<int>" << std::endl;
//	return a > b ? a : b; // 补充返回语句
//}
//
//template<>
//char Max<char>(const char& a, const char& b) 
//{
//	std::cout << "This is Max<char>" << std::endl;
//	return a > b ? a : b;
//}
//
//int Max(const int& a, const int& b) 
//{
//	std::cout << "This is Max" << std::endl;
//	return a > b ? a : b;
//}
//
//int main()
//
//{
//
//	Max(10, 20);
//	Max(12.34, 23.45);
//	Max('A', 'B');
//	Max<int>(20, 30);
//
//	return 0;
//
//}
using namespace std;
template<class T1, class T2>
class Data
{
public:
	Data() { cout << "Data<T1, T2>" << endl; }

private:
	T1 _d1;
	T2 _d2;
};

template <class T1>
class Data<T1, int>
{
public:
	Data() { cout << "Data<T1, int>" << endl; }
private:
	T1 _d1;
	int _d2;
};

template <typename T1, typename T2>
class Data <T1*, T2*>
{
public:
	Data() { cout << "Data<T1*, T2*>" << endl; }
private:
	T1 _d1;
	T2 _d2;
};

template <typename T1, typename T2>
class Data <T1&, T2&>
{
public:
	Data(const T1& d1, const T2& d2)
		: _d1(d1)
		, _d2(d2)
	{
		cout << "Data<T1&, T2&>" << endl;
	}

private:
	const T1& _d1;
	const T2& _d2;

};

int main()
{
	Data<double, int> d1;
	Data<int, double> d2;
	Data<int*, int*> d3;
	Data<int&, int&> d4(1, 2);

	return 0;
}